package com.mew.chess.core.game.yxx.game.core;

import cn.hutool.core.util.RandomUtil;
import com.mew.chess.core.game.yxx.game.common.YxxBetType;
import com.mew.chess.core.game.yxx.game.common.YxxType;
import com.zebra.common.ByteBufUtils;
import io.netty.buffer.ByteBuf;
import lombok.Data;
import lombok.ToString;

import java.util.Arrays;

/**
 * 游戏逻辑
 */
@Data
@ToString
public class YxxGame {

    public int[] dice = new int[3];

    //控制 -1 不控制 ， 控不出什么
    public int[] initDice(int c){
        dice = new int[3];

        for (int i = 0; i < dice.length; i++) {
            int x = 0;
            do {
                dice[i] = RandomUtil.randomInt(YxxType.values().length) + 1;
                x++;
            }while (dice[i]==c && x<50);
        }

        return dice;
    }

    /**
     * 投注鱼、虾、蟹、虎、葫芦或鸡，出现单骰1:1,出现双骰1:2，出现围骰1:3
     * （例如，下注虾100，开出结果为虾虾蟹，则玩家获得派彩300，盈余200）
     * 投注两两组合，最终结果3颗骰子中出现对应组合，即可获得下注赔付1:5
     * （例如，下注虾鱼100，开出结果为虾鱼蟹，则玩家获得派彩600，盈余500）
     * 此游戏不另外抽水
     * @param betType
     * @return
     */
    public int payment(YxxBetType betType){
        int multiple = 0;
        int[] typesInt = betType.typesInt();
        //押注个数
        int betNum = typesInt.length;

        for (int i : typesInt) {
            int count = (int) Arrays.stream(dice).filter(d -> d == i).count();
            if (betNum==1&&count>0){
                //压一个
                multiple = ++count;
            }else if (betNum==2 && count==0){
                //压少了直接不给
                return 0;
            }

        }

        //压了两个 并从循环中出来了
        if (betNum==2){
            multiple = 6;
        }

        return multiple;
    }

    public void write(ByteBuf b){
        ByteBufUtils.writeIntArray(b,this.dice);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 50; i++) {
            YxxGame yxxGame = new YxxGame();
            yxxGame.initDice(5);
            System.out.println(yxxGame);
        }

    }
}
